Attribute VB_Name = "modUser"
Option Explicit


Declare Function LogonUser Lib "advapi32" Alias "LogonUserA" ( _
    ByVal lpszUser As String, ByVal lpszDomain As String, _
    ByVal lpszPass As String, ByVal dwLogonType As Long, _
    ByVal dwLogonProvider As Long, Handle As Long) As Long

Declare Function CloseHandle Lib "kernel32" (Handle As Long) As Long
        
Global Const LOGON32_LOGON_INTERACTIVE = 2
Global Const LOGON32_LOGON_NETWORK = 3
Global Const LOGON32_LOGON_BATCH = 4
Global Const LOGON32_LOGON_SERVICE = 5

Global Const LOGON32_PROVIDER_DEFAULT = 0

Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100

Const FORMAT_MESSAGE_FROM_HMODULE = &H800




    Const NERR_BASE = 2100
    Const MAX_NERR = NERR_BASE + 899 ' This is the last error in
                                     ' NERR   range.
    Const LOAD_LIBRARY_AS_DATAFILE = &H2
Declare Function LoadLibraryEx _
    Lib "kernel32" _
    Alias "LoadLibraryExA" ( _
    ByVal lpLibFileName As String, _
    ByVal hFile As Long, _
    ByVal dwFlags As Long) As Long

Declare Function FreeLibrary Lib "kernel32" _
       (ByVal hLibModule As Long) As Long

Declare Function FormatMessage _
    Lib "Kernel32.dll" _
    Alias "FormatMessageA" ( _
    ByVal Flags As Long, _
    ByVal Source As Long, _
    ByVal MessageID As Long, _
    ByVal LanguageID As Long, _
    ByVal Buffer As String, _
    ByVal Size As Long, _
    args As Any) As Long

Declare Function LocalFree _
    Lib "Kernel32.dll" _
    ( _
    ByVal Handle As Long) As Long

Public Function Logon(strUser As String, _
    strDomain As String, _
    strPass As String, _
    strError As String) As Long
    
Dim lngError As Long
Dim lngHandle As Long

    lngError = LogonUser( _
        strUser, _
        strDomain, _
        strPass, _
        LOGON32_LOGON_INTERACTIVE, _
        LOGON32_PROVIDER_DEFAULT, _
        lngHandle)
        
    If lngError = 0 Then
    
        strError = ErrorMessage(Err.LastDllError)
        Logon = -1
        
    Else
    
        Logon = 0
        lngError = CloseHandle(lngHandle)
        
    End If
    
End Function
Function ErrorMessage(lCode As Long) As String

Dim lngError As Long
Dim ptrBuffer As Long
Dim strMessage As String
Dim hModule As Long
Dim lngFlags As Long
Dim str As String

        lngFlags = FORMAT_MESSAGE_FROM_SYSTEM

         If (lCode >= NERR_BASE And lCode <= MAX_NERR) Then
            hModule = LoadLibraryEx("netmsg.dll", 0&, LOAD_LIBRARY_AS_DATAFILE)
            If (hModule <> 0) Then
                lngFlags = lngFlags Or FORMAT_MESSAGE_FROM_HMODULE
            End If
         End If

    strMessage = Space$(256)
    lngError = FormatMessage(lngFlags, hModule, lCode, 0&, strMessage, 256, 0&)
        
    If (hModule <> 0) Then
        lngError = FreeLibrary(hModule)
    End If
    
    ErrorMessage = strMessage

End Function


